package com.powazi.logging.service;

import java.sql.Timestamp;
import java.util.List;

import com.powazi.model.logging.LogModel;

/**
 * Log Service
 * 
 * @author gb
 * @date 2008-01-14
 */
public interface LogService {

	/**
	 * Create a log.
	 * 
	 * @param ModlogModelel
	 * @return
	 */
	public int log(LogModel ModlogModelel);

	/**
	 * Create a log when an Exception Occurs.
	 * 
	 * @param logModel
	 * @return
	 */
	public int logException(LogModel logModel, Throwable ex);

	/**
	 * Get a List of Logs.
	 * 
	 * @return
	 */
	public List<LogModel> getLogs();

	/**
	 * Delete Log.
	 * 
	 * @deprecated
	 */
	public void deleteLog();

	/***************************************************************************
	 * GetLogs
	 **************************************************************************/

	/**
	 * 根据 SessionId 得到一个session内的一系列动作。
	 * 
	 * @param sessionId
	 * @return
	 */
	public List<LogModel> getOperationsInSession(long sessionId);
	public List<LogModel> getOperationsInSession(long[] sessionId);

	/**
	 * 得到一个 User 在某一时间点所处的session中的所有动作。
	 * 
	 * @param userId
	 * @param timePoint
	 * @return
	 */
	public List<LogModel> getOperationsInSession(long userId, Timestamp timePoint);
	public List<LogModel> getOperationsInSession(long[] userId, Timestamp timePoint);

	/**
	 * 得到一个 User 在一段时间内的所有动作。
	 * 
	 * @param userId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<LogModel> getUserOperationsInTimePeriod(long userId, String startTime, String endTime);
	public List<LogModel> getUserOperationsInTimePeriod(long[] userId, String startTime, String endTime);

	/**
	 * 得到一个操作对象（袜箱，袜子）在指定时间内的所有操作。
	 * 
	 * @param targetId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<LogModel> getTargetOperations(int targetId, String startTime, String endTime);
	public List<LogModel> getTargetOperations(int[] targetId, String startTime, String endTime);

	/**
	 * 得到一个操作对象（袜箱，袜子）在指定时间内的访问者id。
	 * 
	 * @param targetId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<String> getUsersOfOperationTarget(int targetId, String startTime, String endTime);
	public List<String> getUsersOfOperationTarget(int[] targetId, String startTime, String endTime);

}
